import { isJSONString } from '@/utils'
import { useMarkerStore } from '@/store/marker'
import { useUserStore } from '@/store/user'

const TCPSocket = wx.createTCPSocket()

export function startConnect() {
  const userStore = useUserStore()
  if (userStore.hasToken) {
    TCPSocket.connect({
      address: import.meta.env.VITE_TCP_SOCKET_URL,
      port: import.meta.env.VITE_TCP_SOCKET_PORT
    })
  }
}

export function createTCPSocket() {
  const markerStore = useMarkerStore()
  const userStore = useUserStore()

  TCPSocket.onConnect(() => {
    console.log('连接成功', userStore.userInfo?.id)
    TCPSocket.write(
      JSON.stringify({ type: 'mini', uid: userStore.userInfo?.id })
    )
  })

  TCPSocket.onError(err => {
    console.log('tcp socket 连接失败', err)
    TCPSocket.close()
  })

  TCPSocket.onMessage(res => {
    const dataView = new Uint8Array(res.message)
    // const textDecoder = new TextDecoder()
    // const msg = textDecoder.decode()
    const msg = decodeURIComponent(escape(String.fromCharCode(...dataView)))
    console.log(msg)
    if (isJSONString(msg))
      markerStore.add({
        ...JSON.parse(msg),
        width: 26,
        height: 32,
        iconPath: '/static/marker/warning.png',
        causedBy: 'warning'
      })
    console.log('接收的信息', msg)
  })
}
